/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.model.domain.proceso.envio.subida.xml;

import util.file.xml.TablaXml;
import com.model.dao.mapping.Enaho;
import com.model.domain.persona.HogarXml;
import com.model.domain.ubicacion.ViviendaXml;
import java.util.HashMap;
import java.util.Map;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import util.file.xml.ArchivoXml;

/**
 *
 * @author Rdelacruz
 */
public class CampoXmlEnaho 
extends ArchivoXmlEnaho
{

    protected CampoXmlEnaho(ArchivoXml archivoXml) {
        super(archivoXml);
    }        
         
    public void parsearHogar(TablaXml<HogarXml> tabla) throws Exception {
        parsear(tabla, Enaho.HOGAR.getTabla());
    }
  
    
    public TablaXml<ViviendaXml> getTablaVivienda() throws Exception {
        TablaXml<ViviendaXml> tabla = new TablaXml<ViviendaXml>();
        parsear(tabla, Enaho.VIVIENDA.getTabla());
        return tabla;
    }

    public TablaXml<HogarXml> getTablaHogar() throws Exception {
        TablaXml<HogarXml> tabla = new TablaXml<HogarXml>();
        parsearHogar(tabla);
        return tabla;
    }
    
    //Verificar si se puede hacer de la misma forma que CampoXmlEnaho.calcularNodosTabla()
    //Ademas si calcularNodosTabla() puede ser implementado en ArchivoXmlEnaho
    @Override
    protected Map<String,Node> calcularNodosTabla() throws Exception {
        Document docXml = this.getArchivoXml().getDocument();
        Map<String,Node> nodosTabla = new HashMap<String,Node>();
        NodeList lnTablas = docXml.getElementsByTagName("TABLAS");
        Node nTablas = lnTablas.item(0);
        
        if(nTablas==null)
            throw new Exception("Este archivo no es data XML de campo");
        
        NodeList hsTablas = nTablas.getChildNodes();
        
        int nhsTablas = hsTablas.getLength();//numero de tablas
        for (int i = 0; i < nhsTablas; i++) {
            Node hTablas = hsTablas.item(i);

            //descartando los nodos de tipo texto                                
            if(hTablas.getNodeType()==Node.TEXT_NODE)//if(nTabla.getNodeName().equals("#text"))
                continue;           
            
            nodosTabla.put(hTablas.getNodeName(), hTablas);
        } 
        return nodosTabla;
    }
    
    
    /*
    public static void main(String[] args) {
        
        try {
            BaseDatosXml bd = new BaseDatosXml();                    
            parsear(bd,"C:/temp/product.xml");
            System.out.println(bd);
        } catch (Exception ex) {
            ex.printStackTrace();
        }                
    }
    */  

    
}
